package com.flying.inherit.method;

/**
 * @author 刘鹏飞
 * @ClassName TestMethod
 * @Date 2024/12/9 22:48
 * @Created by 刘鹏飞
 * @Description 继承以后方法的特点
 */
public class TestMethod {
    public static void main(String[] args) {
        Son son = new Son();

        /**
         * 子类如果定义了集合父类同名的方法，这就叫做子类重写了父类的方法
         *
         * @override 用来表示方法的重写
         *
         * 如果想要重写父类的方法：
         *      (1) 方法名和返回值类型也要一致
         *      (2) 子类的权限修饰符要大于等于父类的权限修饰符(父类私有的方法是不能重写的)
         *       public > protected > 缺省 > private
         * 静态方法不能重写：
         *      (1) 子类可以定义一个和父类重名的静态方法，但是不能重写！！
         *      (2) 静态方法可以被继承，但是不能重写
         *
         *  子类重写了父类的方法，如果想要在子类中继续调父类的方法，使用 super.方法名()
         */

        son.test();
        son.test1();
        son.test2();
        son.test3();
        son.test4();


    }

}


class Son extends Father {
    public void test() {
        // test1()
        test2();
    }

    public void test1() {
        System.out.println("Son.test1");
        //  这个不叫重写了父类里的test1() 方法, 因为子类就没有继承父类定义的test1() 方法
    }

    @Override
    public void test2() {
        System.out.println("我是子类里的test方法");
    }

    @Override
    public void test3() {

        super.test3();
    }

    public static void test4() {
        System.out.println("我是子类里静态方法tsest4");
    }

}


class Father {
    private void test1() {
        System.out.println("我是父类里private方法tset1");
    }

    public void test2() {
        System.out.println("我是父类里public方法tset2");
    }

    protected void test3() {
        System.out.println("我是父类里protected方法tset3");
    }

    public static void test4() {
        System.out.println("我是父类里静态方法tset4");
    }


}
